home *** CD-ROM | disk | FTP | other *** search
/ Czech Logic, Card & Gambling Games / Logické hry.iso / hry / Fish Fillets / script / turtle / code.lua next >
Encoding:
Text File  |  2005-07-16  |  22.3 KB  |  580 lines

  1.  
  2. file_include('script/share/prog_border.lua')
  3.  
  4. HYB_SMALL = 1
  5. HYB_BIG = 2
  6. local hybTable = {}
  7. hybTable[HYB_SMALL] = small
  8. hybTable[HYB_BIG] = big
  9.  
  10. -- -----------------------------------------------------------------
  11. local function charAt(s, i)
  12.     return string.sub(s, i, i)
  13. end
  14. -- -----------------------------------------------------------------
  15. local function planHyb(unit, destX, destY)
  16.     if not level_isShowing() then
  17.         local symbols
  18.         --NOTE: symbols order is as dir_up==1, ...
  19.         if unit == small then
  20.             symbols = "udlr"
  21.         else
  22.             symbols = "UDLR"
  23.         end
  24.         level_planShow(function(count)
  25.                 local result = false
  26.                 local dir = findDir(unit, destX, destY)
  27.                 if dir == dir_no then
  28.                     room.natvrdo = 0
  29.                     result = true
  30.                 else
  31.                     level_action_move(charAt(symbols, dir))
  32.                 end
  33.                 return result
  34.             end)
  35.     end
  36. end
  37.  
  38. -- -----------------------------------------------------------------
  39. local function isCarring(model)
  40.     -- whether fish is under a object
  41.     --NOTE: wall and water does not count
  42.     local locX, locY = model:getLoc()
  43.     for x = locX, locX + model:getW() - 1 do
  44.         local y = locY - 1
  45.         if not model_equals(-1, x, y) and not model_equals(room.index, x, y) then
  46.             return true
  47.         end
  48.     end
  49.     return false
  50. end
  51.  
  52. -- -----------------------------------------------------------------
  53. -- Init
  54. -- -----------------------------------------------------------------
  55. local function prog_init()
  56.     initModels()
  57.     sound_playMusic("music/rybky05.ogg")
  58.     local pokus = getRestartCount()
  59.  
  60.     --NOTE: a final level
  61.     small:setGoal("goal_alive")
  62.     big:setGoal("goal_alive")
  63.     zelva:setGoal("goal_out")
  64.  
  65.     -- -------------------------------------------------------------
  66.     local function prog_init_room()
  67.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  68.         local boring = 0
  69.         local roompole = createArray(1)
  70.  
  71.         room.natvrdo = 0
  72.         room.tvrdaryba = 0
  73.         room.blbnout = 300 + random(300)
  74.         room.kolikrat = 0
  75.         room.hlouposti = random(1000) + 500
  76.         room.kolikhlouposti = 0
  77.         room.poslhloupost = random(3)
  78.         room.cosedelo = 0
  79.         room.uvod = 0
  80.  
  81.         return function()
  82.             if small:getAction() == "rest" and big:getAction() == "rest" then
  83.                 boring = boring + 1
  84.             else
  85.                 boring = 0
  86.             end
  87.             if room.natvrdo == 1 then
  88.                 planHyb(hybTable[room.tvrdaryba], room.tvrdex, room.tvrdey)
  89.             end
  90.  
  91.             if stdBorderReport() then
  92.                 addv(5, "zel-v-ukol")
  93.             end
  94.             if isReady(small) and isReady(big) and no_dialog() and room.natvrdo == 0 then
  95.                 for pom1 = 1, 5 do
  96.                     if room.blbnout > 0 then
  97.                         room.blbnout = room.blbnout - 1
  98.                     end
  99.                 end
  100.                 if room.hlouposti > 0 then
  101.                     room.hlouposti = room.hlouposti - 1
  102.                 end
  103.                 if room.blbnout == 0 and room.natvrdo == 0 and boring > 40 then
  104.                     pomb1 = true
  105.                     room.tvrdaryba = random(2) + 1
  106.                     local hybFish = hybTable[room.tvrdaryba]
  107.                     if not isCarring(hybFish) then
  108.                         room.tvrdex = random(room:getW() - 2) + 1
  109.                         room.tvrdey = random(room:getH() - 2) + 1
  110.                         if math.abs(hybFish.X - room.tvrdex) + math.abs(hybFish.Y - room.tvrdey) > 8 and findDir(hybFish, room.tvrdex, room.tvrdey) ~= dir_no then
  111.                             room.natvrdo = 1
  112.                         end
  113.                         if room.natvrdo == 1 then
  114.                             room.blbnout = (room.kolikrat + 3) * (random(100) + 50)
  115.                         end
  116.                     end
  117.                 end
  118.                 if room.hlouposti > 0 then
  119.                     room.hlouposti = room.hlouposti - 1
  120.                 end
  121.                 if room.natvrdo == 1 then
  122.                     room.kolikrat = room.kolikrat + 1
  123.                     if roompole[0] <= 1 then
  124.                         pom1 = random(3)
  125.                         if pom1 == 0 or pom1 == 2 then
  126.                             if room.tvrdaryba == HYB_SMALL then
  127.                                 addv(random(10), "zel-v-coto"..pom1)
  128.                             else
  129.                                 addm(random(10), "zel-m-coto"..pom1)
  130.                             end
  131.                             room.cosedelo = room.tvrdaryba + 2
  132.                         else
  133.                             room.cosedelo = room.tvrdaryba
  134.                         end
  135.                     elseif random(100) < 60 then
  136.                         if room.tvrdaryba == HYB_SMALL then
  137.                             addm(random(60), "zel-m-potvora"..random(2))
  138.                         else
  139.                             addv(random(60), "zel-v-stacit"..random(2))
  140.                         end
  141.                     end
  142.                     if roompole[0] == 0 then
  143.                         roompole[0] = roompole[0] + 1
  144.                     end
  145.                     if random(100) < room.kolikrat * 10 - 50 then
  146.                         if roompole[0] == 1 then
  147.                             roompole[0] = roompole[0] + 1
  148.                             room.cosedelo = room.tvrdaryba + 4
  149.                         end
  150.                     end
  151.                 elseif room.cosedelo > 0 then
  152.                     if room.cosedelo <= 2 then
  153.                         if room.cosedelo == 1 then
  154.                             addv(random(10), "zel-v-coto1")
  155.                         else
  156.                             addm(random(10), "zel-m-coto1")
  157.                         end
  158.                         room.cosedelo = room.cosedelo + 2
  159.                     end
  160.                     if room.cosedelo > 4 or random(100) < 50 or room.kolikrat <= 2 then
  161.                         if odd(room.cosedelo) then
  162.                             addm(random(3) + 3, "zel-m-nevim"..random(2))
  163.                         else
  164.                             addv(random(3) + 3, "zel-v-nevim"..random(2))
  165.                         end
  166.                     end
  167.                     if room.cosedelo > 4 or random(100) < 40 and room.kolikrat >= 3 then
  168.                         if odd(room.cosedelo) then
  169.                             addv(random(30) + 10, "zel-v-cosedeje")
  170.                         else
  171.                             addm(random(30) + 10, "zel-m-cimtoje")
  172.                         end
  173.                     end
  174.                     if room.cosedelo > 4 then
  175.                         adddel(random(30) + 10)
  176.                         big:planDialog(0, "zel-v-tazelva",
  177.                                 function() small:talk("zel-m-tazelva") end)
  178.                         switch(random(2)){
  179.                             [0] = function()
  180.                                 addm(random(20) + 4, "zel-m-jasne")
  181.                             end,
  182.                             [1] = function()
  183.                                 addv(random(20) + 4, "zel-v-pochyby")
  184.                             end,
  185.                         }
  186.                     end
  187.                     room.cosedelo = 0
  188.                 elseif room.uvod == 0 then
  189.                     room.uvod = 1
  190.                     if roompole[0] < 2 then
  191.                         addv(10 + random(25), "zel-v-zelva"..random(2))
  192.                         addm(randint(5, 20), "zel-m-fotky"..random(2))
  193.                         addv(5, "zel-v-zmistnosti0")
  194.                     elseif random(100) < 120 - pokus * 10 then
  195.                         addv(random(60) + 10, "zel-v-zmistnosti1")
  196.                     end
  197.                 elseif room.hlouposti == 0 then
  198.                     room.kolikhlouposti = room.kolikhlouposti + 1
  199.                     room.hlouposti = room.kolikhlouposti * (1500 + random(1500))
  200.                     pom1 = random(2)
  201.                     if pom1 == room.poslhloupost then
  202.                         pom1 = 2
  203.                     end
  204.                     room.poslhloupost = pom1
  205.                     switch(pom1){
  206.                         [0] = function()
  207.                             addv(50, "zel-v-bizarni")
  208.                         end,
  209.                         [1] = function()
  210.                             addm(50, "zel-m-priroda")
  211.                         end,
  212.                         [2] = function()
  213.                             addv(50, "zel-v-tvary")
  214.                             if random(100) < 60 then
  215.                                 addm(50, "zel-m-jednoduse")
  216.                             end
  217.                         end,
  218.                     }
  219.                 end
  220.             end
  221.         end
  222.     end
  223.  
  224.     -- -------------------------------------------------------------
  225.     local function prog_init_zelva()
  226.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  227.  
  228.         zelva.stav = 4
  229.         zelva.xicht = 0
  230.         zelva.napad = 0
  231.         zelva.pozadavek = 0
  232.  
  233.         return function()
  234.             if room.natvrdo == 1 then
  235.                 zelva.pozadavek = 7
  236.             end
  237.             switch(zelva.pozadavek){
  238.                 [8] = function()
  239.                     if zelva.stav == 8 then
  240.                         zelva.pozadavek = 0
  241.                     end
  242.                 end,
  243.                 [0] = function()
  244.                     if zelva.dir ~= dir_no then
  245.                         zelva.pozadavek = 8
  246.                     end
  247.                 end,
  248.                 [7] = function()
  249.                     if room.natvrdo == 0 then
  250.                         zelva.pozadavek = 0
  251.                     end
  252.                 end,
  253.             }
  254.             if zelva.anim ~= "" then
  255.                 goanim(zelva)
  256.             else
  257.                 if zelva.pozadavek == 0 and zelva.napad == 0 then
  258.                     switch(zelva.stav){
  259.                         [8] = function()
  260.                             if random(100) < 2 then
  261.                                 zelva.napad = 1
  262.                             end
  263.                         end,
  264.                         [1] = function()
  265.                             switch(random(400)){
  266.                                 [0] = function()
  267.                                     zelva.napad = 8
  268.                                 end,
  269.                                 [1] = function()
  270.                                     zelva.napad = 2
  271.                                 end,
  272.                                 [2] = function()
  273.                                     zelva.napad = 2
  274.                                 end,
  275.                                 [3] = function()
  276.                                     zelva.napad = 3
  277.                                 end,
  278.                                 [4] = function()
  279.                                     zelva.napad = 3
  280.                                 end,
  281.                                 [5] = function()
  282.                                     zelva.napad = 4
  283.                                 end,
  284.                                 [6] = function()
  285.                                     zelva.napad = 4
  286.                                 end,
  287.                                 [7] = function()
  288.                                     zelva.napad = 4
  289.                                 end,
  290.                             }
  291.                         end,
  292.                         [2] = function()
  293.                             if random(100) < 6 then
  294.                                 zelva.napad = 1
  295.                             end
  296.                         end,
  297.                         [3] = function()
  298.                             if random(100) < 6 then
  299.                                 zelva.napad = 1
  300.                             end
  301.                         end,
  302.                         [4] = function()
  303.                             switch(random(100)){
  304.                                 [0] = function()
  305.                                     zelva.napad = 1
  306.                                 end,
  307.                                 [1] = function()
  308.                                     zelva.napad = 5
  309.                                 end,
  310.                                 [2] = function()
  311.                                     zelva.napad = 6
  312.                                 end,
  313.                             }
  314.                         end,
  315.                         [5] = function()
  316.                             if random(100) < 2 then
  317.                                 zelva.napad = 4
  318.                             end
  319.                         end,
  320.                         [6] = function()
  321.                             if random(100) < 2 then
  322.                                 zelva.napad = 4
  323.                             end
  324.                         end,
  325.                     }
  326.                 elseif zelva.pozadavek ~= 0 and zelva.pozadavek ~= zelva.stav and zelva.napad == 0 then
  327.                     switch(zelva.pozadavek){
  328.                         [7] = function()
  329.                             if isIn(zelva.stav, {2, 3, 8}) then
  330.                                 zelva.napad = 1
  331.                             elseif isIn(zelva.stav, {1, 5, 6}) then
  332.                                 zelva.napad = 4
  333.                             elseif zelva.stav == 4 then
  334.                                 zelva.napad = 7
  335.                             end
  336.                         end,
  337.                         [8] = function()
  338.                             if isIn(zelva.stav, {5, 6}) then
  339.                                 zelva.napad = 4
  340.                             elseif isIn(zelva.stav, {4, 2, 3}) then
  341.                                 zelva.napad = 1
  342.                             elseif zelva.stav == 1 then
  343.                                 zelva.napad = 8
  344.                             end
  345.                         end,
  346.                     }
  347.                 end
  348.                 switch(zelva.stav){
  349.                     [8] = function()
  350.                         zelva.xicht = 27
  351.                         switch(zelva.napad){
  352.                             [1] = function()
  353.                                 setanim(zelva, "S[pozadavek],29S[napad],0S[stav],1")
  354.                             end,
  355.                         }
  356.                     end,
  357.                     [1] = function()
  358.                         if random(100) < 5 then
  359.                             if random(2) == 0 then
  360.                                 zelva.xicht = 29
  361.                             else
  362.                                 zelva.xicht = randint(31, 33)
  363.                             end
  364.                         end
  365.                         switch(zelva.napad){
  366.                             [8] = function()
  367.                                 setanim(zelva, "S[pozadavek],27S[napad],0S[stav],8")
  368.                             end,
  369.                             [2] = function()
  370.                                 setanim(zelva, "s[pozadavek],36S[pozadavek],38S[napad],0S[stav],2")
  371.                             end,
  372.                             [3] = function()
  373.                                 setanim(zelva, "s[pozadavek],37S[pozadavek],42S[napad],0S[stav],3")
  374.                             end,
  375.                             [4] = function()
  376.                                 setanim(zelva, "s[pozadavek],34s[pozadavek],35S[pozadavek],0S[napad],0S[stav],4")
  377.                             end,
  378.                         }
  379.                     end,
  380.                     [2] = function()
  381.                         if random(100) < 5 then
  382.                             if random(2) == 0 then
  383.                                 zelva.xicht = 38
  384.                             else
  385.                                 zelva.xicht = 40 + random(2)
  386.                             end
  387.                         end
  388.                         switch(zelva.napad){
  389.                             [1] = function()
  390.                                 setanim(zelva, "s[pozadavek],36S[pozadavek],29S[napad],0S[stav],1")
  391.                             end,
  392.                         }
  393.                     end,
  394.                     [3] = function()
  395.                         if random(100) < 5 then
  396.                             if random(2) == 0 then
  397.                                 zelva.xicht = 42
  398.                             else
  399.                                 zelva.xicht = 44 + random(2)
  400.                             end
  401.                         end
  402.                         switch(zelva.napad){
  403.                             [1] = function()
  404.                                 setanim(zelva, "s[pozadavek],37S[pozadavek],29S[napad],0S[stav],1")
  405.                             end,
  406.                         }
  407.                     end,
  408.                     [4] = function()
  409.                         if random(100) < 5 then
  410.                             if random(2) == 0 then
  411.                                 zelva.xicht = 0
  412.                             else
  413.                                 zelva.xicht = random(3) * 2 + 2
  414.                             end
  415.                         end
  416.                         switch(zelva.napad){
  417.                             [1] = function()
  418.                                 setanim(zelva, "s[pozadavek],35s[pozadavek],34S[pozadavek],29S[napad],0S[stav],1")
  419.                             end,
  420.                             [5] = function()
  421.                                 setanim(zelva, "s[pozadavek],13S[pozadavek],16S[napad],0S[stav],5")
  422.                             end,
  423.                             [6] = function()
  424.                                 setanim(zelva, "s[pozadavek],18S[pozadavek],19S[napad],0S[stav],6")
  425.                             end,
  426.                             [7] = function()
  427.                                 setanim(zelva, "S[pozadavek],8S[napad],0S[stav],7")
  428.                             end,
  429.                         }
  430.                     end,
  431.                     [5] = function()
  432.                         if random(100) < 5 then
  433.                             if random(2) == 0 then
  434.                                 zelva.xicht = 14
  435.                             else
  436.                                 zelva.xicht = 16 + 7 * random(2)
  437.                             end
  438.                         end
  439.                         switch(zelva.napad){
  440.                             [4] = function()
  441.                                 setanim(zelva, "s[pozadavek],13S[pozadavek],0S[napad],0S[stav],4")
  442.                             end,
  443.                         }
  444.                     end,
  445.                     [6] = function()
  446.                         if random(100) < 5 then
  447.                             if random(2) == 0 then
  448.                                 zelva.xicht = 19
  449.                             else
  450.                                 zelva.xicht = 21 + 4 * random(2)
  451.                             end
  452.                         end
  453.                         switch(zelva.napad){
  454.                             [4] = function()
  455.                                 setanim(zelva, "s[pozadavek],18S[pozadavek],0S[napad],0S[stav],4")
  456.                             end,
  457.                         }
  458.                     end,
  459.                     [7] = function()
  460.                         if isRange(zelva.xicht, 8, 10) then
  461.                             zelva.xicht = zelva.xicht + 1
  462.                         else
  463.                             zelva.xicht = 8
  464.                         end
  465.                         if zelva.pozadavek ~= 7 then
  466.                             setanim(zelva, "s[pozadavek],12d4S[napad],0S[stav],4")
  467.                         end
  468.                     end,
  469.                 }
  470.                 goanim(zelva)
  471.             end
  472.             zelva.afaze = zelva.xicht
  473.             if isIn(zelva.afaze, {0, 2, 4, 6, 14, 16, 19, 21, 23, 25, 27, 29, 38, 42}) then
  474.                 if random(100) < 5 then
  475.                     zelva.afaze = zelva.afaze + 1
  476.                 end
  477.             end
  478.             zelva:updateAnim()
  479.         end
  480.     end
  481.  
  482.     -- -------------------------------------------------------------
  483.     local function prog_init_perla()
  484.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  485.  
  486.         perla.anim = "a0d?0-90La1a2a3a2a1a0d?10-100G"
  487.  
  488.         return function()
  489.             goanim(perla)
  490.             perla:updateAnim()
  491.         end
  492.     end
  493.  
  494.     -- -------------------------------------------------------------
  495.     local function prog_init_small()
  496.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  497.     end
  498.  
  499.     -- -------------------------------------------------------------
  500.     local function prog_init_rybka()
  501.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  502.  
  503.         rybka.cinnost = 0
  504.  
  505.         return function()
  506.             if rybka.dir ~= dir_no then
  507.                 rybka.cinnost = 1
  508.                 rybka.anim = ""
  509.                 for pom1 = 1, random(5) + 5 do
  510.                     rybka.anim = rybka.anim.."a"..(random(3) + 1)
  511.                 end
  512.                 for pom1 = 1, random(5) + 5 do
  513.                     rybka.anim = rybka.anim.."a"..(random(3) + 1).."d1"
  514.                 end
  515.                 for pom1 = 1, random(5) + 5 do
  516.                     rybka.anim = rybka.anim.."a"..(random(3) + 1).."d2"
  517.                 end
  518.                 for pom1 = 1, random(5) + 5 do
  519.                     rybka.anim = rybka.anim.."a"..(random(3) + 1).."d3"
  520.                 end
  521.                 rybka.anim = rybka.anim.."S[cinnost],0"
  522.                 resetanim(rybka)
  523.             end
  524.             switch(rybka.cinnost){
  525.                 [0] = function()
  526.                     setanim(rybka, "a0d?30-200S[cinnost],2d?10-40s[cinnost],1r")
  527.                     rybka.cinnost = 1
  528.                 end,
  529.                 [1] = function()
  530.                     goanim(rybka)
  531.                 end,
  532.                 [2] = function()
  533.                     goanim(rybka)
  534.                     if math.mod(game_getCycles(), 3) == 0 then
  535.                         rybka.afaze = random(3) + 1
  536.                     end
  537.                 end,
  538.             }
  539.             rybka:updateAnim()
  540.         end
  541.     end
  542.  
  543.     -- --------------------
  544.     local update_table = {}
  545.     local subinit
  546.     subinit = prog_init_room()
  547.     if subinit then
  548.         table.insert(update_table, subinit)
  549.     end
  550.     subinit = prog_init_zelva()
  551.     if subinit then
  552.         table.insert(update_table, subinit)
  553.     end
  554.     subinit = prog_init_perla()
  555.     if subinit then
  556.         table.insert(update_table, subinit)
  557.     end
  558.     subinit = prog_init_small()
  559.     if subinit then
  560.         table.insert(update_table, subinit)
  561.     end
  562.     subinit = prog_init_rybka()
  563.     if subinit then
  564.         table.insert(update_table, subinit)
  565.     end
  566.     return update_table
  567. end
  568. local update_table = prog_init()
  569.  
  570.  
  571. -- -----------------------------------------------------------------
  572. -- Update
  573. -- -----------------------------------------------------------------
  574. function prog_update()
  575.     for key, subupdate in pairs(update_table) do
  576.         subupdate()
  577.     end
  578. end
  579.  
  580.